home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 242 / Issue 242 - April 2008 - DPCS0408DVD.ISO / Software Money Savers / VirtualDub / Source / VirtualDub-1.7.7-src.7z / src / Asuka / source / lookup.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2007-08-13  |  1.8 KB  |  60 lines

  1. //    Asuka - VirtualDub Build/Post-Mortem Utility
  2. //    Copyright (C) 2005 Avery Lee
  3. //
  4. //    This program is free software; you can redistribute it and/or modify
  5. //    it under the terms of the GNU General Public License as published by
  6. //    the Free Software Foundation; either version 2 of the License, or
  7. //    (at your option) any later version.
  8. //
  9. //    This program is distributed in the hope that it will be useful,
  10. //    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. //    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. //    GNU General Public License for more details.
  13. //
  14. //    You should have received a copy of the GNU General Public License
  15. //    along with this program; if not, write to the Free Software
  16. //    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17.  
  18. #include "stdafx.h"
  19. #include <vd2/system/vdalloc.h>
  20. #include <vd2/system/vdstl.h>
  21. #include <vd2/system/text.h>
  22. #include <vd2/system/VDString.h>
  23. #include <stdlib.h>
  24. #include <vector>
  25. #include "symbols.h"
  26. #include "utils.h"
  27.  
  28. void VDNORETURN help_lookup() {
  29.     printf("usage: lookup <map file> <address>\n");
  30.     exit(5);
  31. }
  32.  
  33. void tool_lookup(const vdfastvector<const char *>& args, const vdfastvector<const char *>& switches, bool amd64) {
  34.     if (args.size() < 2)
  35.         help_lookup();
  36.  
  37.     char *s;
  38.     sint64 addr = _strtoi64(args[1], &s, 16);
  39.  
  40.     if (*s)
  41.         fail("lookup: invalid address \"%s\"", args[0]);
  42.  
  43.     vdautoptr<IVDSymbolSource> pss(VDCreateSymbolSourceLinkMap());
  44.  
  45.     pss->Init(VDTextAToW(args[0]).c_str());
  46.  
  47.     const VDSymbol *sym = pss->LookupSymbol(addr);
  48.  
  49.     if (!sym)
  50.         fail("symbol not found for address %08x", addr);
  51.  
  52.     const char *fn;
  53.     int line;
  54.  
  55.     if (pss->LookupLine(addr, fn, line))
  56.         printf("%08I64x   %s + %x [%s:%d]\n", addr, sym->name, addr-sym->rva, fn, line);
  57.     else
  58.         printf("%08I64x   %s + %x\n", addr, sym->name, addr-sym->rva);
  59. }
  60.